﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using log4net;
using Telerik.WinControls.UI;
using System.IO;
using Telerik.WinControls.Enumerations;
using Telerik.WinControls;
using Telerik.WinControls.UI.Export;

namespace QuanLyNhaSach
{
    public partial class frmBC_PhieuDatHangNCC : Form
    {
        public frmBC_PhieuDatHangNCC()
        {
            InitializeComponent();
        }

        //Tao Parttern Seleton
        static frmBC_PhieuDatHangNCC doituong = null;
        private ILog logger;
        sv_QuanLyNhaSach.AdapterClient service = new sv_QuanLyNhaSach.AdapterClient();
        DataSet ds_dondathang;
        public static frmBC_PhieuDatHangNCC TaoDoiTuong()
        {
            if (doituong == null)
                doituong = new frmBC_PhieuDatHangNCC();
            return doituong;
        }

        private void frmBC_PhieuDatHangNCC_Load(object sender, EventArgs e)
        {
            logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
            try
            {
                if (rbt_toanboddh.Checked == true)
                {
                    Load_Tatca();
                    bt_xemin.Enabled = true;
                }

            }
            catch (Exception ex)
            {
                logger.Error("Error: " + ex.Message);
            }
        }

        #region Các phương thức Load  
        private void Load_Tatca()
        {
            try
            {
                    DataSet ds = new DataSet();
                    string batdau = dtp_ngaybatdau.Value.Month + "/" + dtp_ngaybatdau.Value.Day + "/" + dtp_ngaybatdau.Value.Year;
                    string ketthuc = dtp_ngayketthuc.Value.Month + "/" + dtp_ngayketthuc.Value.Day + "/" + dtp_ngayketthuc.Value.Year;
                    ds.ReadXml(new StringReader(service.selectqueryByText("Select MaDHNCC,k.TenKho, ncc.TenNCC,NgayThangDH,DiaChiNCC,TongDonHang,TamUng,ConLai,GhiChuDH, NgayBanGiao "
                                                                            + "from PhieuDatHangNCC dhncc, Kho k, NhaCungCap ncc "
                                                                            + "where k.MaKho = dhncc.makho and ncc.MaNCC =dhncc.MaNCC and  NgayThangDH between '" + batdau + "' and '" + ketthuc + "'")));
                    if (ds.Tables.Count > 0)
                    {
                        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                        {
                            ds.Tables[0].Rows[i]["TongDonHang"] = double.Parse(ds.Tables[0].Rows[i]["TongDonHang"].ToString()).ToString("#,##0");
                            ds.Tables[0].Rows[i]["TamUng"] = double.Parse(ds.Tables[0].Rows[i]["TamUng"].ToString()).ToString("#,##0");
                            ds.Tables[0].Rows[i]["ConLai"] = double.Parse(ds.Tables[0].Rows[i]["ConLai"].ToString()).ToString("#,##0");
                            ds.Tables[0].Rows[i]["NgayThangDH"] = DateTime.Parse(ds.Tables[0].Rows[i]["NgayThangDH"].ToString()).Day.ToString("00") + "/" + DateTime.Parse(ds.Tables[0].Rows[i]["NgayThangDH"].ToString()).Month.ToString("00") + "/" + DateTime.Parse(ds.Tables[0].Rows[i]["NgayThangDH"].ToString()).Year.ToString("0000");
                        }
                        gv_phieudathang.DataSource = ds.Tables[0];
                        if (gv_phieudathang.Rows.Count > 0)
                        {
                            for (int i = 0; i < gv_phieudathang.Rows.Count; i++)
                            {
                                gv_phieudathang.Rows[i].Cells["stt"].Value = i + 1;
                            }
                        }

                    }
                    else
                    {
                        gv_phieudathang.DataSource = null;
                        gv_ctdathangncc.DataSource = null;

                    }
            }
            catch
            {

            }
        }     
        private void Load_CTTatCa()
        {
            try
            {
                string madhncc = gv_phieudathang.CurrentRow.Cells["MaDHNCC"].Value.ToString().Trim();
                DataSet ds = new DataSet();
                ds.ReadXml(new StringReader(service.selectqueryByText("select mh.TenMH,SoLuong,DonGia, ChietKhau,ThanhTien,DaGiao from CTDatHangNCC ct,MatHang mh where ct.MaMH = mh.MaMH and MaDHNCC='" + madhncc + "'")));
                if (ds.Tables.Count > 0)
                {
                    ds.Tables[0].Columns.Add("stt", typeof(int));
                    DataRow dr;
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        dr = ds.Tables[0].NewRow();
                        dr["stt"] = i + 1;
                        ds.Tables[0].Rows[i]["stt"] = dr["stt"].ToString();
                        ds.Tables[0].Rows[i]["DonGia"] = double.Parse(ds.Tables[0].Rows[i]["DonGia"].ToString()).ToString("#,##0");
                        ds.Tables[0].Rows[i]["ThanhTien"] = double.Parse(ds.Tables[0].Rows[i]["ThanhTien"].ToString()).ToString("#,##0");
                        if (ds.Tables[0].Rows[i]["DaGiao"].ToString().Trim() == "true")
                        {
                            ds.Tables[0].Rows[i]["DaGiao"] = "Đã giao";
                        }
                        else
                            ds.Tables[0].Rows[i]["DaGiao"] = "Chưa giao";
                    }
                    gv_ctdathangncc.DataSource = ds.Tables[0];

                }
                else
                    gv_ctdathangncc.DataSource = null;

            }
            catch
            {
            }
        }
        private void Load_PDHDaXuLy()
        {
            try
            {
                string batdau = dtp_ngaybatdau.Value.Month + "/" + dtp_ngaybatdau.Value.Day + "/" + dtp_ngaybatdau.Value.Year;
                string ketthuc = dtp_ngayketthuc.Value.Month + "/" + dtp_ngayketthuc.Value.Day + "/" + dtp_ngayketthuc.Value.Year;
                string sql = "Select MaDHNCC,k.TenKho, ncc.TenNCC,NgayThangDH,DiaChiNCC,TongDonHang,TamUng,ConLai,GhiChuDH, NgayBanGiao "
                                + "from PhieuDatHangNCC dhncc, Kho k, NhaCungCap ncc "
                                + "where k.MaKho = dhncc.makho and ncc.MaNCC =dhncc.MaNCC and  NgayThangDH between '" + batdau + "' and '" + ketthuc + "'"
                                + "and MaDHNCC not in(select MaDHNCC from CTDatHangNCC where DaGiao = 'false')";
                ds_dondathang = new DataSet();
                //ds_dondathang.Tables[0].Clear();
                ds_dondathang.ReadXml(new StringReader(service.selectqueryByText(sql)));
                if (ds_dondathang.Tables.Count > 0)
                {
                    DataRow dr;
                    for (int i = 0; i < ds_dondathang.Tables[0].Rows.Count; i++)
                    {
                        ds_dondathang.Tables[0].Rows[i]["TongDonHang"] = double.Parse(ds_dondathang.Tables[0].Rows[i]["TongDonHang"].ToString()).ToString("#,##0");
                        ds_dondathang.Tables[0].Rows[i]["TamUng"] = double.Parse(ds_dondathang.Tables[0].Rows[i]["TamUng"].ToString()).ToString("#,##0");
                        ds_dondathang.Tables[0].Rows[i]["ConLai"] = double.Parse(ds_dondathang.Tables[0].Rows[i]["ConLai"].ToString()).ToString("#,##0");
                        ds_dondathang.Tables[0].Rows[i]["NgayThangDH"] = DateTime.Parse(ds_dondathang.Tables[0].Rows[i]["NgayThangDH"].ToString()).Day.ToString("00") + "/" + DateTime.Parse(ds_dondathang.Tables[0].Rows[i]["NgayThangDH"].ToString()).Month.ToString("00") + "/" + DateTime.Parse(ds_dondathang.Tables[0].Rows[i]["NgayThangDH"].ToString()).Year.ToString("0000");
                    }
                    gv_phieudathang.DataSource = ds_dondathang.Tables[0];
                    if (gv_phieudathang.Rows.Count > 0)
                    {
                        for (int i = 0; i < gv_phieudathang.Rows.Count; i++)
                        {
                            gv_phieudathang.Rows[i].Cells["stt"].Value = i + 1;
                        }
                    }
                }
                else
                {
                    gv_phieudathang.DataSource = null;
                    gv_ctdathangncc.DataSource = null;
                }
            }
            catch
            {
            }

        }
        private void Load_PDHChuaXuLy()
        {
            try
            {
                string batdau = dtp_ngaybatdau.Value.Month + "/" + dtp_ngaybatdau.Value.Day + "/" + dtp_ngaybatdau.Value.Year;
                string ketthuc = dtp_ngayketthuc.Value.Month + "/" + dtp_ngayketthuc.Value.Day + "/" + dtp_ngayketthuc.Value.Year;
                string sql = "Select MaDHNCC,k.TenKho, ncc.TenNCC,NgayThangDH,DiaChiNCC,TongDonHang,TamUng,ConLai,GhiChuDH, NgayBanGiao "
                                + "from PhieuDatHangNCC dhncc, Kho k, NhaCungCap ncc "
                                + "where k.MaKho = dhncc.makho and ncc.MaNCC =dhncc.MaNCC and  NgayThangDH between '" + batdau + "' and '" + ketthuc + "'"
                                + "and MaDHNCC in(select MaDHNCC from CTDatHangNCC where DaGiao = 'false')";
                ds_dondathang = new DataSet();
               // ds_dondathang.Tables[0].Clear();
                ds_dondathang.ReadXml(new StringReader(service.selectqueryByText(sql)));
                if (ds_dondathang.Tables.Count > 0)
                {
                    DataRow dr;
                    for (int i = 0; i < ds_dondathang.Tables[0].Rows.Count; i++)
                    {
                        ds_dondathang.Tables[0].Rows[i]["TongDonHang"] = double.Parse(ds_dondathang.Tables[0].Rows[i]["TongDonHang"].ToString()).ToString("#,##0");
                        ds_dondathang.Tables[0].Rows[i]["TamUng"] = double.Parse(ds_dondathang.Tables[0].Rows[i]["TamUng"].ToString()).ToString("#,##0");
                        ds_dondathang.Tables[0].Rows[i]["ConLai"] = double.Parse(ds_dondathang.Tables[0].Rows[i]["ConLai"].ToString()).ToString("#,##0");
                        ds_dondathang.Tables[0].Rows[i]["NgayThangDH"] = DateTime.Parse(ds_dondathang.Tables[0].Rows[i]["NgayThangDH"].ToString()).Day.ToString("00") + "/" + DateTime.Parse(ds_dondathang.Tables[0].Rows[i]["NgayThangDH"].ToString()).Month.ToString("00") + "/" + DateTime.Parse(ds_dondathang.Tables[0].Rows[i]["NgayThangDH"].ToString()).Year.ToString("0000");
                    }
                    gv_phieudathang.DataSource = ds_dondathang.Tables[0];
                    if (gv_phieudathang.Rows.Count>0)
                    {
                        for (int i = 0; i < gv_phieudathang.Rows.Count; i++)
                        {
                            gv_phieudathang.Rows[i].Cells["stt"].Value = i + 1;
                        }
                    }
                }
                else
                {
                    gv_phieudathang.DataSource = null;
                    gv_ctdathangncc.DataSource = null;
                }
            }
            catch
            {
            }
        }
        #endregion

        private void gv_phieudathang_SelectionChanged(object sender, EventArgs e)
        {
            if (gv_phieudathang.DataSource != null)
            {
                Load_CTTatCa();
            }
            else
                gv_ctdathangncc.DataSource = null;

        }

        private void bt_loc_Click(object sender, EventArgs e)
        {
            try
            {
                errorProvider1.Clear();
                if (dtp_ngaybatdau.Value > DateTime.Now)
                {
                    errorProvider1.SetError(dtp_ngaybatdau, "Ngày bắt đầu phải nhỏ hơn hoặc bằng ngày hiện tại");
                }
                else if (dtp_ngayketthuc.Value > DateTime.Now)
                {
                    errorProvider1.SetError(dtp_ngayketthuc, "Ngày đến phải nhỏ hơn hoặc bằng ngày hiện tại");
                }
                else if ((DateTime.Now.Year - dtp_ngaybatdau.Value.Year) > 3)
                {
                    errorProvider1.SetError(dtp_ngaybatdau, "Năm bắt đầu không lâu 3 năm so với năm nay");
                }
                else if ((DateTime.Now.Year - dtp_ngayketthuc.Value.Year) > 3)
                {
                    errorProvider1.SetError(dtp_ngayketthuc, "Năm đến không lâu 3 năm so với năm nay");
                }
                else if (dtp_ngaybatdau.Value > dtp_ngayketthuc.Value)
                {
                    errorProvider1.SetError(dtp_ngayketthuc, "Ngày kết thúc phải lớn hơn ngày bắt đầu!");
                }
                else
                {
                    if (rbt_toanboddh.Checked == true)
                    {
                        Load_Tatca();
                    }
                    if (rbt_ddhchuaxuly.Checked == true)
                    {
                        Load_PDHChuaXuLy();
                    }
                    if (rbt_ddhdaxuly.Checked == true)
                    {
                        Load_PDHDaXuLy();
                    }
                }

            }
            catch
            {
            }
        }

        private void bt_excel_Click(object sender, EventArgs e)
        {
            saveFileDialog1.Filter = "Excel (*.xls)|*.xls";
            if (saveFileDialog1.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            if (saveFileDialog1.FileName.Equals(String.Empty))
            {
                RadMessageBox.SetThemeName(this.gv_phieudathang.ThemeName);
                RadMessageBox.Show("Làm ơn nhập tên file.");
                return;
            }
            string fileName = this.saveFileDialog1.FileName;

            ExportToExcelML excelExporter = new ExportToExcelML(this.gv_phieudathang);

            excelExporter.SheetMaxRows = ExcelMaxRows._1048576;
            excelExporter.ExportVisualSettings = this.exportVisualSettings;


            try
            {
                excelExporter.RunExport(fileName);

                RadMessageBox.SetThemeName(this.gv_phieudathang.ThemeName);
                DialogResult dr = RadMessageBox.Show("Dữ liệu trong Grid đã được in thành công. Bạn có muốn mở file này không?",
                    "Export to Excel", MessageBoxButtons.YesNo, RadMessageIcon.Question);
                if (dr == DialogResult.Yes)
                {
                    openExportFile = true;
                }
            }
            catch (IOException ex)
            {
                RadMessageBox.SetThemeName(this.gv_phieudathang.ThemeName);
                RadMessageBox.Show(this, ex.Message, "I/O Error", MessageBoxButtons.OK, RadMessageIcon.Error);
            }
        }
        bool openExportFile = false;
        private bool exportVisualSettings;

        private void bt_xemin_Click(object sender, EventArgs e)
        {
            try
            {
                errorProvider1.Clear();
                Report.frm_BC_DatHangNCC dhncc = new Report.frm_BC_DatHangNCC();
                if (dtp_ngaybatdau.Value > DateTime.Now)
                {
                    errorProvider1.SetError(dtp_ngaybatdau, "Ngày bắt đầu phải nhỏ hơn hoặc bằng ngày hiện tại");
                }
                else if (dtp_ngayketthuc.Value > DateTime.Now)
                {
                    errorProvider1.SetError(dtp_ngayketthuc, "Ngày đến phải nhỏ hơn hoặc bằng ngày hiện tại");
                }
                else if ((DateTime.Now.Year - dtp_ngaybatdau.Value.Year) > 3)
                {
                    errorProvider1.SetError(dtp_ngaybatdau, "Năm bắt đầu không lâu 3 năm so với năm nay");
                }
                else if ((DateTime.Now.Year - dtp_ngayketthuc.Value.Year) > 3)
                {
                    errorProvider1.SetError(dtp_ngayketthuc, "Năm đến không lâu 3 năm so với năm nay");
                }
                else if (dtp_ngaybatdau.Value > dtp_ngayketthuc.Value)
                {
                    errorProvider1.SetError(dtp_ngayketthuc, "Ngày kết thúc phải lớn hơn ngày bắt đầu!");
                }
                else
                {
                    dhncc.TuNgay = dtp_ngaybatdau.Value;
                    dhncc.DenNgay = dtp_ngayketthuc.Value;
                    dhncc.ShowDialog();
                }
            }
            catch (Exception ex)
            {
            }
        }

        private void btthoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
